from sqlalchemy import Column, Integer, String, Boolean, DateTime, Text, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from api.database import Base

class Proxy(Base):
    """
    代理模型
    支持 socks5, http, https, vmess 等代理类型
    """
    __tablename__ = "proxies"
    
    id = Column(Integer, primary_key=True, index=True)
    user_id = Column(Integer, ForeignKey("users.id"), nullable=False)
    name = Column(String(100), nullable=False)  # 代理名称
    type = Column(String(20), nullable=False)  # 'socks5', 'http', 'https', 'vmess', 'vless', 'trojan' 等
    host = Column(String(255), nullable=False)  # 代理服务器地址
    port = Column(Integer, nullable=False)  # 代理端口
    username = Column(String(100), nullable=True)  # 代理用户名（可选）
    password = Column(Text, nullable=True)  # 代理密码（可选）
    
    # v2ray/xray 专用配置（JSON格式存储完整配置）
    v2ray_config = Column(Text, nullable=True)  # vmess/vless/trojan等完整配置JSON
    
    latency = Column(Integer, nullable=True)  # 延迟（毫秒）
    is_active = Column(Boolean, default=True)  # 是否启用
    is_shared = Column(Boolean, default=False)  # 是否共享给其他用户
    last_test_time = Column(DateTime, nullable=True)  # 最后测试时间
    created_at = Column(DateTime, default=func.now())
    updated_at = Column(DateTime, default=func.now(), onupdate=func.now())
    
    # 关系
    user = relationship("User", back_populates="proxies")
    email_accounts = relationship("EmailAccount", back_populates="proxy")